//
//  ViewController.m
//  沙盒路径
//
//  Created by yuanjiang on 2016/12/6.
//  Copyright © 2016年 YuanJiang. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *tf1;
@property (weak, nonatomic) IBOutlet UITextField *tf2;

@end

@implementation ViewController
/*
 一、沙盒机制
 沙盒：本质上是一个文件夹，沙盒是iOS平台，针对于每一个应用程序（APP）安装的应用想访问沙盒里文件的一个过程，也就是在本地中生成一个文件！(名字是随机产生的!)不同的应用程序之间是不能够互相访问文件的（也就是沙盒中的内容）。
 二、沙盒里的几个文件夹：
 Documents：用来存储用户想要持久化存储的数据，一切想要长久存储的数据，都可以放在此文件夹下，注意：Doucments文件夹下不要存储太多的数据，会影响应用程序的上线 上线可能会被拒！
 library/Caches:用来存储缓存文件，例如：缓存的视频，音乐，小说，图片等等。
 library/preferences:用来存储用户的偏好设置文件；例如：用户的账号和密码，还有程序是否第一次启动；
 tmp：存放临时文件，比如：下载的zip包压缩文件，当解压文件之后，该文件会被删除，将解压之后的文件数据移动到Caches或者Documents文件夹下；
 注意：VIP：系统生成的文件夹，我们是没有权限去删除和更改的，我们只能操作自己生成的文件；
 */

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    self.tf1.delegate=self;
    self.tf2.delegate=self;
    //1.获取沙盒文件的路径
    NSString *homeFilePath = NSHomeDirectory();
    NSLog(@"homeFilePath =>%@",homeFilePath);
    //2.获取程序包的路径,程序包 包括程序启动时加载的所有资源,也就是程序上传到App store时的压缩包
    NSString *budleFilePath =[[NSBundle mainBundle] bundlePath];
    NSLog(@"bundleFilePath =>%@",budleFilePath);
    //3.获取Documents文件夹的路径
    /*
     NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde)
     第一个参数的含义：要查找的文件夹
     第二个参数的含义：要查找的范围  （用户域中查找）
     第三个参数的含义：是否查找完整路径  YES 是
     firstObject   查找第一个用户
     该方法是OS X 中的一个方法，对于OS X 开发而言，可以有多个用户，所以，获取的是多个用户的路径，返回值为数组，但是对于iOS而言，用户只有一个，所以，直接去第一个用户，获取最后一个用户即可，获取的都是当前用户
     */
    NSString *documentFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSLog(@"documentFilePath=>%@",documentFilePath);
     //4.获取library文件夹路径
    NSString *library = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject];
    NSLog(@"library =>%@",library);
    
     //5.获取tmp文件夹路径
    NSString *tmp = NSTemporaryDirectory();
    //6.获取library文件夹下的caches文件夹
    NSString *cacaheFilePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];
    //7.获取文件夹，往Preferences里添加数据
    NSUserDefaults *userFile = [NSUserDefaults standardUserDefaults];//直接操作的是Preferences文件夹
    [userFile setObject:@"yuanjiang" forKey:@"userName"];
    [userFile setObject:@"23" forKey:@"userAge"];
    [userFile setBool:YES forKey:@"dddd"];
    [userFile synchronize];//l立即同步数据,立即将数据写入偏好设置中去
    
}

//获取字符串文件的路径
-(NSString *)getFilePath{
    //获取Documents文件夹的路径
    NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    //拼接上写入文件的路径
    NSString *pathStr= [str stringByAppendingPathComponent:@"text.txt"];
    NSLog(@" filePath =>%@",pathStr);
    return pathStr;
    
}
//字符串写入文件  需求：将第一个输入框内的内容写入到文件当中
- (IBAction)stringinto:(id)sender {
   //获取路径
    NSString *pathStr = [self getFilePath];
    //3.将第一个输入框里的内容写入文件中 每次的写入同一文件中，值都是覆盖的过程
    BOOL isWriteToFile = [self.tf1.text writeToFile:pathStr atomically:YES encoding:NSUTF8StringEncoding error:nil];
    if (isWriteToFile) {
        NSLog(@"字符串写入成功");
    }else{
        NSLog(@"字符串写入失败");
    }
}
- (IBAction)stringOut:(id)sender {
    NSString *pathStr = [self getFilePath];
    NSString *data = [NSString stringWithContentsOfFile:pathStr encoding:NSUTF8StringEncoding error:nil];
    self.tf2.text = data;
    NSLog(@"路径下的内容 =>%@",data);
    
}
//数组写入文件，需求：将第一个输入框和第二个输入框里的内容同时写入文件
- (IBAction)arrayInot:(id)sender {
    NSString *pathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSString *str = [pathStr stringByAppendingPathComponent:@"array.arr"];
    //写入数据到文件
    NSArray *arr =@[self.tf1.text,self.tf2.text];
    BOOL isWriteToFile = [arr writeToFile:str atomically:YES];
    if (isWriteToFile) {
        NSLog(@"s数组写入成功");
    }else{
        NSLog(@"数组写入失败");
    }
    
}
- (IBAction)arrayOut:(id)sender {
    NSString *pathStr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSString *str = [pathStr stringByAppendingPathComponent:@"array.arr"];
    NSArray *data = [NSArray arrayWithContentsOfFile:str];
    
    self.tf2.text = [NSString stringWithFormat:@"%@--%@",[data firstObject],[data lastObject]];
    NSLog(@"路径下的内容 =>%@",data);
}
//字典写入文件，将两个输入框里的内容，按照所给的key值，存入字典中
- (IBAction)dicInto:(id)sender {
    NSString *filePath = [self getDictionaryFilePath];
    //将字典写入文件
    NSDictionary *data = @{@"tf1":self.tf1.text,@"tf2":self.tf2.text};
    BOOL isWriteToFile = [data writeToFile:filePath atomically:YES];
    NSLog(@"%@",isWriteToFile?@"写入字典成功":@"写入字典失败");
    
}
- (IBAction)dicOut:(id)sender {
    NSString *filePath = [self getDictionaryFilePath];
    NSDictionary *data = [NSDictionary dictionaryWithContentsOfFile:filePath];
    self.tf1.text= [data objectForKey:@"tf1"];
    self.tf2.text= [data objectForKey:@"tf2"];
    
    NSLog(@"路径下的内容 =>%@",data);
}

//获取字典文件的路径
- (NSString *)getDictionaryFilePath{
    NSString *documentsFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    //拼接完整路径
    NSString *filePath = [documentsFilePath stringByAppendingPathComponent:@"dictionary.avi"];
    NSLog(@"filePathDIc = %@",filePath);
    return filePath;
}

- (IBAction)erjinzhiInto:(id)sender {
    //1.获取路径
    NSString *filePath = [self getDataFilePath];
    //2.写入数据  将字符串类型转化为NSData类型
    NSData *data = [self.tf1.text dataUsingEncoding:NSUTF8StringEncoding];
    BOOL isSucceed = [data writeToFile:filePath atomically:YES];
    NSLog(@"%@",isSucceed ? @"写入二进制数据成功！":@"写入二级制数据失败！");
    
}
- (IBAction)erjinzhiOut:(id)sender {
    //1.获取路径
    NSString *filePath = [self getDataFilePath];
    //2.读取内容w
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    self.tf2.text = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    NSLog(@"路径下的内容 =>%@",data);
}

//获取二进制文件路径
- (NSString *)getDataFilePath{
    NSString *documentsFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    //拼接路径
    NSString *filePath = [documentsFilePath stringByAppendingPathComponent:@"data.data"];
    return filePath;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

//删除的话这样写

-(void) shanchu
{
    NSString *documentsFilePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    //拼接路径
    NSString *filePath = [documentsFilePath stringByAppendingPathComponent:@"data.data"];

    NSFileManager *manager = [NSFileManager defaultManager];
    [manager removeItemAtPath:filePath error:nil];
}


@end
